<?php

namespace Mogod\Core\Loader;

require_once __DIR__ . '/LoaderAutoloadAbstract.php';

/**
 * Стандартный автозагрузчик классов. Для загрузки использует экземпляр класса
 * Loader
 *
 * @author morph, goorus
 *
 */
class LoaderAutoloadStandart extends LoaderAutoloadAbstract
{
	/**
	 * Загрузчик
	 *
	 * @var Loader
	 */
	protected $loader;

	/**
	 * Получить загрузчик по умолчанию
	 *
	 * @return Loader
	 */
	public function getDefaultLoader()
	{
		$loader = new Loader();
		$loader->setWorker(new LoaderWorkerStandart());
		return $loader;
	}

	/**
	 * Получить текущий загрузчик
	 *
	 * @return Loader
	 */
	public function getLoader()
	{
		return $this->loader;
	}

	/**
	 * @inheritdoc
	 * @see LoaderAutoloadAbstract::register
	 */
	public function register()
	{
		if (!$this->loader) {
			$this->loader = $this->getDefaultLoader();
		}
		spl_autoload_register(array($this->loader, 'load'));
		return true;
	}

	/**
	 * Изменить текущего загрузчика
	 *
	 * @param Loader $loader Загрузчик
	 */
	public function setLoader($loader)
	{
		$this->loader = $loader;
	}

	/**
	 * @inheritdoc
	 * @see LoaderAutoloadAbstract::unregister
	 */
	public function unregister()
	{
		spl_autoload_unregister(array($this->loader, 'load'));
		return true;
	}
}